package py.com.alfa.escriba.web.rest.secure;


import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;

import py.com.alfa.escriba.exception.ServiceException;
import py.com.alfa.escriba.persistence.dto.EscribanosDTO;
import py.com.alfa.escriba.persistence.dto.PersonaInfoParaControlDTO;
import py.com.alfa.escriba.persistence.dto.admin.ClienteDTO;
import py.com.alfa.escriba.persistence.dto.admin.ClienteInfoDTO;
import py.com.alfa.escriba.persistence.dto.admin.DomicilioDTO;
import py.com.alfa.escriba.persistence.dto.admin.FuncionalidadDTO;
import py.com.alfa.escriba.persistence.dto.admin.PerfilDTO;
import py.com.alfa.escriba.persistence.dto.admin.PersonaDTO;
import py.com.alfa.escriba.persistence.dto.admin.PersonaInfoDTO;
import py.com.alfa.escriba.persistence.dto.admin.TelefonoDTO;
import py.com.alfa.escriba.persistence.dto.admin.UsuarioDTO;
import py.com.alfa.escriba.persistence.dto.query.PersonaQueryDTO;
import py.com.alfa.escriba.web.rest.EscribaService;


@Path(EscribaService.SECURE_PATH + "/admin")
public interface AdminSecureRESTService {
	
	/******* PERSONA *******/
	@Path("/obtenerPersona/{id}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)	
	public PersonaDTO   obtenerPersona(@PathParam("id")Long id) throws ServiceException;
	
	@Path("/obtenerEscribano/{id}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)	
	public EscribanosDTO	obtenerEscribano(@PathParam("id")Long id) throws ServiceException;
	
	@Path("/crearPersona")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)	
	public PersonaDTO crearPersona(PersonaDTO dto, @Context HttpServletRequest request) throws ServiceException;
	
	@Path("/obtenerPersonas")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public List<PersonaDTO> obtenerPersonas(@Context HttpServletRequest request) throws ServiceException;
	
	@Path("/obtenerEscribanos")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	public List<EscribanosDTO> obtenerEscribanos()throws ServiceException;
	
	@Path("/obtenerPersonaInfo/{id}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)	
	public PersonaInfoDTO obtenerPersonaInfo(@PathParam("id")Long id) throws ServiceException;
	
	@Path("/crearPersonaInfo")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)	
	public PersonaInfoDTO crearPersonaInfo(PersonaInfoDTO dto, @Context HttpServletRequest request) throws ServiceException;
	
	@Path("/crearEscribano")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)	
	public EscribanosDTO crearEscribano(EscribanosDTO dto, @Context HttpServletRequest request) throws ServiceException;
	
	@Path("/eliminarPersonaInfo")
	@DELETE		
	public void eliminarPersonaInfo(@HeaderParam("id-persona")Long id) throws ServiceException;
	
	@Path("/actualizarPersonaInfo")
	@PUT
	@Consumes(MediaType.APPLICATION_JSON)	
	public void   actualizarPersonaInfo(PersonaInfoDTO dto, @Context HttpServletRequest request) throws ServiceException;
	
	
	@Path("/buscarPersonas")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)	
	public List<PersonaInfoDTO> buscarPersonas(PersonaDTO dto,@Context HttpServletRequest request) throws ServiceException;
	
	@Path("/byPaisDocumento")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)
	public PersonaInfoParaControlDTO getPersonaByPaisDocumento(PersonaQueryDTO values) throws ServiceException;

	/******* CLIENTE *******/
//	@Path("/obtenerClientes")
//	@GET
//	@Produces(MediaType.APPLICATION_JSON)
//	public List<ClienteDTO> obtenerClientes() throws ServiceException;
//
//	@Path("/obtenerCliente/{id}")
//	@GET
//	@Produces(MediaType.APPLICATION_JSON)	
//	public ClienteInfoDTO   obtenerCliente(@PathParam("id")Long id) throws ServiceException;
//	
//	@Path("/actualizarCliente")
//	@PUT
//	@Consumes(MediaType.APPLICATION_JSON)
//	@Produces(MediaType.APPLICATION_JSON)	
//	public ClienteDTO       actualizarCliente(ClienteDTO dto) throws ServiceException;
//	
//	@Path("/eliminarCliente")
//	@DELETE	
//	public void	eliminarCliente(@HeaderParam("id-cliente")Long id) throws ServiceException;
//
//	@Path("/crearCliente")
//	@POST
//	@Consumes(MediaType.APPLICATION_JSON)
//	@Produces(MediaType.APPLICATION_JSON)	
//	public ClienteDTO       crearCliente(ClienteDTO dto) throws ServiceException;
//	
//	@Path("/crearClienteInfo")
//	@POST
//	@Consumes(MediaType.APPLICATION_JSON)
//	@Produces(MediaType.APPLICATION_JSON)	
//	public ClienteInfoDTO   crearClienteInfo(ClienteInfoDTO dto) throws ServiceException;
//
//	@Path("/actualizarClienteInfo")
//	@PUT
//	@Consumes(MediaType.APPLICATION_JSON)	
//	public void   actualizarClienteInfo(ClienteInfoDTO dto) throws ServiceException;

	/******* TELEFONO *******/
	@Path("/actualizarTelefono")
	@PUT
	@Consumes(MediaType.APPLICATION_JSON)	
	public void              actualizarTelefono(TelefonoDTO dto) throws ServiceException;
	
	@Path("/eliminarTelefono")
	@PUT
	@Consumes(MediaType.APPLICATION_JSON)	
	public void              eliminarTelefono(TelefonoDTO dto) throws ServiceException;
	
	@Path("/crearTelefono")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)		
	public TelefonoDTO       crearTelefono(TelefonoDTO dto) throws ServiceException;

	/******* DOMICILIO *******/
	@Path("/actualizarDomicilio")
	@PUT
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)	
	public DomicilioDTO      actualizarDomicilio(DomicilioDTO dto) throws ServiceException;
	
	@Path("/eliminarDomicilio")
	@DELETE		
	public void              eliminarDomicilio(@HeaderParam("id-domicilio")Long id) throws ServiceException;
	
	@Path("/crearDomicilio")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)
	@Produces(MediaType.APPLICATION_JSON)	
	public DomicilioDTO      crearDomicilio(DomicilioDTO dto) throws ServiceException;	

	/******* USUARIO *******/
	@Path("/usuario")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	List<UsuarioDTO> listUsuario(@Context HttpServletRequest request) throws ServiceException;

	@Path("/usuario/{id}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	UsuarioDTO showUsuario(@PathParam("id") Long id, @Context HttpServletRequest request) throws ServiceException;
	
	@Path("/usuario/valida")
	@POST
	@Produces(MediaType.APPLICATION_JSON)
	@Consumes(MediaType.APPLICATION_JSON)
	UsuarioDTO validaUsuario(UsuarioDTO dto, @Context HttpServletRequest request) throws ServiceException;

	@Path("/usuario/{id}")
	@PUT
	@Produces(MediaType.APPLICATION_JSON)
	@Consumes(MediaType.APPLICATION_JSON)
	UsuarioDTO saveUsuario(@PathParam("id") Long id, UsuarioDTO dto, @Context HttpServletRequest request) throws ServiceException;

	@Path("/usuario")
	@POST
	@Produces(MediaType.APPLICATION_JSON)
	@Consumes(MediaType.APPLICATION_JSON)
	UsuarioDTO createUsuario(UsuarioDTO dto, @Context HttpServletRequest request) throws ServiceException;

	@Path("/usuario/{id}")
	@DELETE
	Response deleteUsuario(@PathParam("id") Long id, @Context HttpServletRequest request) throws ServiceException;
	
	@Path("/usuario/cambiarClave/{id}")
	@PUT
	@Produces(MediaType.APPLICATION_JSON)
	@Consumes(MediaType.APPLICATION_JSON)
	UsuarioDTO cambiarClave(@PathParam("id") Long id, UsuarioDTO dto, @Context HttpServletRequest request) throws ServiceException;
	
	/******* FUNCIONALIDAD *******/
	@Path("/funcionalidad")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	List<FuncionalidadDTO> listFuncionalidad(@Context HttpServletRequest request) throws ServiceException;

	@Path("/funcionalidad/{id}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	FuncionalidadDTO showFuncionalidad(@PathParam("id") Long id, @Context HttpServletRequest request) throws ServiceException;

	@Path("/funcionalidad/{id}")
	@PUT
	@Produces(MediaType.APPLICATION_JSON)
	@Consumes(MediaType.APPLICATION_JSON)
	FuncionalidadDTO saveFuncionalidad(@PathParam("id") Long id, FuncionalidadDTO dto, @Context HttpServletRequest request) throws ServiceException;

	@Path("/funcionalidad")
	@POST
	@Produces(MediaType.APPLICATION_JSON)
	@Consumes(MediaType.APPLICATION_JSON)
	FuncionalidadDTO createFuncionalidad(FuncionalidadDTO dto, @Context HttpServletRequest request) throws ServiceException;

	@Path("/funcionalidad/{id}")
	@DELETE
	Response deleteFuncionalidad(@PathParam("id") Long id, @Context HttpServletRequest request) throws ServiceException;
	
	/******* PERFIL *******/
	@Path("/perfil")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	List<PerfilDTO> listPerfil(@Context HttpServletRequest request) throws ServiceException;

	@Path("/perfil/{id}")
	@GET
	@Produces(MediaType.APPLICATION_JSON)
	PerfilDTO showPerfil(@PathParam("id") Long id, @Context HttpServletRequest request) throws ServiceException;

	@Path("/perfil/{id}")
	@PUT
	@Produces(MediaType.APPLICATION_JSON)
	@Consumes(MediaType.APPLICATION_JSON)
	PerfilDTO savePerfil(@PathParam("id") Long id, PerfilDTO dto, @Context HttpServletRequest request) throws ServiceException;

	@Path("/perfil")
	@POST
	@Produces(MediaType.APPLICATION_JSON)
	@Consumes(MediaType.APPLICATION_JSON)
	PerfilDTO createPerfil(PerfilDTO dto, @Context HttpServletRequest request) throws ServiceException;

	@Path("/perfil/{id}")
	@DELETE
	Response deletePerfil(@PathParam("id") Long id, @Context HttpServletRequest request) throws ServiceException;
}
